/*
实验2-2 一元多项式的乘法运算
分数 20
作者 陈越
单位 浙江大学

请设计实现两个链式存储的一元多项式乘法运算的算法，并分析该算法的时间复杂度。
输入格式：

输入分2行，每行分别先给出多项式非零项的个数，再以指数递降方式输入一个多项式非零项系数和指数（绝对值均为不超过 1000 的整数）。数字间以空格分隔。
输出格式：

在一行中以指数递降方式输出乘积多项式非零项的系数和指数。数字间以空格分隔，但结尾不能有多余空格。零多项式应输出 0 0。
输入样例：

4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1

输出样例：

15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
*/

#include <iostream>
#include <vector>

using namespace std;

void inputPolynomial(vector<int> &poly, int n) {
    int coef;
    int exp;
    for (int i = 0; i < n; ++i) {
        cin >> coef >> exp;
        poly[exp] = coef;
    }
}

vector<int> multiplyPolynomials(const vector<int> &a, const vector<int> &b) {
    vector<int> result(a.size() + b.size() - 1, 0);
    for (int i = 0; i < a.size(); ++i) {
        for (int j = 0; j < b.size(); ++j) {
            result[i + j] += a[i] * b[j];
        }
    }
    return result;
}

int main() {
    int n, m;
    cin >> n;
    vector<int> a(2001, 0);
    inputPolynomial(a, n);
    cin >> m;
    vector<int> b(2001, 0);
    inputPolynomial(b, m);

    vector<int> result = multiplyPolynomials(a, b);
    bool first = true;
    for (int i = result.size() - 1; i >= 0; --i) {
        if (result[i] != 0) {
            if (first) {
                first = false;
            } else {
                cout << " ";
            }
            cout << result[i] << " " << i;
        }
    }
    if (first) {
        cout << "0 0";
    }

    return 0;
}